/*
 * @Description: 版本管理
 * @Version: 0.3
 * @Autor: 李石
 * @Date: 2021-06-22 18:02:37
 * @LastEditors: 李石
 * @LastEditTime: 2021-11-11 18:38:28
 */

#ifndef __APP_VERSION_H__
#define __APP_VERSION_H__

/****************************
v0.0.1.211111
1.
*/

#define APP_VERSION_MAJOR 0
#define APP_VERSION_MINOR 1
#define APP_VERSION_DESCRIPTION "official"

#define STRINGIFY0(x) #x
#define STRINGIFY(x) STRINGIFY0(x)

#define APP_VERSION_INT (APP_VERSION_MAJOR * 100 + APP_VERSION_MINOR)
#define APP_VERSION_STRING \
    STRINGIFY(APP_VERSION_MAJOR) "." STRINGIFY(APP_VERSION_MINOR)

// 使用编译时间作为版本build号
/**
__DATE__ 程序被编译的日期, 以"Mmm dd yyyy"格式的字符串标注.
__TIME__ 程序被编译的时间, 以"hh:mm:ss"格式的字符串标注, 该时间由asctime返回.
 */
#define YEAR                                                  \
    ((((__DATE__[7] - '0') * 10 + (__DATE__[8] - '0')) * 10 + \
      (__DATE__[9] - '0')) *                                  \
         10 +                                                 \
     (__DATE__[10] - '0'))

/**月份简写
January (Jan)---Febuary (Feb)---March (Mar)---April (Apr)---May (May)---June
(Jun)-- July (Jul)---August (Aug)---September (Sep)---October (Oct)---November
(Nov)---SDecember (Dec)--
*/
#define MONTH                                                                \
    (__DATE__[2] == 'n'                                                      \
         ? (__DATE__[1] == 'a' ? 1 : 6)                                      \
         : __DATE__[2] == 'b'                                                \
               ? 2                                                           \
               : __DATE__[2] == 'r'                                          \
                     ? (__DATE__[0] == 'M' ? 3 : 4)                          \
                     : __DATE__[2] == 'y'                                    \
                           ? 5                                               \
                           : __DATE__[2] == 'l'                              \
                                 ? 7                                         \
                                 : __DATE__[2] == 'g'                        \
                                       ? 8                                   \
                                       : __DATE__[2] == 'p'                  \
                                             ? 9                             \
                                             : __DATE__[2] == 't'            \
                                                   ? 10                      \
                                                   : __DATE__[2] == 'v' ? 11 \
                                                                        : 12)

#define DAY \
    ((__DATE__[4] == ' ' ? 0 : __DATE__[4] - '0') * 10 + (__DATE__[5] - '0'))

#define TIME                                                    \
    ((((((__TIME__[0] - '0') * 10 + (__TIME__[1] - '0')) * 10 + \
        (__TIME__[3] - '0')) *                                  \
           10 +                                                 \
       (__TIME__[4] - '0')) *                                   \
          10 +                                                  \
      (__TIME__[5] - '0')) *                                    \
         10 +                                                   \
     (__TIME__[6] - '0'))

#define APP_BUILD_TIME \
    ((YEAR - 2000) * 10000000000 + MONTH * 100000000 + DAY * 1000000 + TIME)

#define APP_BUILD_DATE (YEAR * 10000 + MONTH * 100 + DAY)

#endif  //__APP_VERSION_H__
